package JavaSE.d6;

import com.sun.management.OperatingSystemMXBean;

import java.lang.management.ManagementFactory;
import java.util.Date;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/*
要求如下：
制定java定时任务，在每个整点时刻执行
定时任务是：将计算机物理内存使用情况，记录到文件memory.txt末尾
每次定时任务，在memory.txt中写入一行内存使用数据
内存使用数据包含三项值，例如：总的物理内存:17038327808;剩余物理内存:6949703680;已使用物理内存:10088624128;
提示：
        //取得运行Java虚拟机的操作系统的管理对象
        OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
        // 总的物理内存
        long totalMemorySize2 = osmxb.getTotalMemorySize() ;
        // 剩余的物理内存
        long freePhysicalMemorySize2 = osmxb.getFreeMemorySize() ;
 */
public class Test11 {
    public static void main(String[] args) {

        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);//创建线程池，规模1;创建定时任务执行对象
        TimerTask timerTask = new TimerTask(){//创建时间任务
            @Override
            public void run() {
                //取得运行Java虚拟机的操作系统的管理对象
                OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
                // 总的物理内存
                long totalMemorySize2 = osmxb.getTotalMemorySize() ;
                System.out.println("总的物理内存"+totalMemorySize2);
                // 剩余的物理内存
                long freePhysicalMemorySize2 = osmxb.getFreeMemorySize() ;
                System.out.println("剩余的物理内存"+freePhysicalMemorySize2);
            }
        };

        Date date = new Date();
        date.setHours(date.getHours()+1);//一小时之后的时间
        date.setMinutes(0);//分置零
        date.setSeconds(0);//秒置零
        //现在的时间
        Date date2 = new Date();

//        scheduledExecutorService.schedule(timerTask,8000, TimeUnit.MILLISECONDS);//执行一次的定时任务
        //以固定频率执行，包含运行时间，小于运行时间按运行时间算
        scheduledExecutorService.scheduleAtFixedRate(timerTask,date.getTime()-date2.getTime(),1000*60*60, TimeUnit.MILLISECONDS);//单位毫秒
        //以固定频率执行,任务执行时间不算入,结束后才开始计时.
//        scheduledExecutorService.scheduleWithFixedDelay(timerTask,0,3000,TimeUnit.MILLISECONDS);//耗时间6秒
    }
}
